package com.nuoniu.sibanyun.service.so;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nuoniu.sibanyun.entity.so.VAreaCalculationDetail;
import com.nuoniu.sibanyun.entity.so.VAreaCalculationMain;
import com.nuoniu.sibanyun.entity.vo.ns_staristics.ProjectBatchExecutionStatisticsVo;
import com.nuoniu.sibanyun.entity.vo.ns_staristics.ProjectExecutionStatisticsVo;
import com.nuoniu.sibanyun.entity.vo.ns_staristics.dto.ProjectExecutionStatisticsDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 面积计算-主表 服务类
 * </p>
 *
 * @author 小啊刚
 * @since 2021-10-22
 */
public interface IVAreaCalculationMainService extends IService<VAreaCalculationMain> {

    /**
     * 保存
     * @param areaCalculationMain
     * @return
     */
    void saveAreaCalculationMain(VAreaCalculationMain areaCalculationMain);

    /**
     * 按照特定 规则 生产 条码（保存到条码主档）
     * @param areaCalculationMain
     */
    void generateAreaCalculationBarCodes(VAreaCalculationMain areaCalculationMain);


    /**
     * 获取单据编码
     */
    String getCode();


    /**
     * 审核
     * @param id
     * @param status
     */
    void examine(Long id, Integer status);

    /**
     * 通过ID 删除
     * @param id
     */
    void deleteById(Long id);

    /**
     * 自动 生产 物料分类 和 物料档案
     * @param id
     */
    void autoGenerateInventory(Long id);

    /**
     * 导入数据
     * @author 小啊刚
     * @date 2021-11-20
     */
    VAreaCalculationMain importData(MultipartFile file) throws NoSuchFieldException, IOException;

    /**
     * 导出数据
     * @author 小啊刚
     * @date 2021-11-20
     */
    void exportData(HttpServletResponse response, Integer orderId);


    /**
     * 挂价
     * @param areaCalculationMain
     */
    void setPrice(VAreaCalculationMain areaCalculationMain);

    /**
     *  更新 批次完成数量
     * @param mainId
     * @param addNum
     */
    void updateCumExecuteQuantity(Long mainId, BigDecimal addNum);


    /**
     * 统计项目 完成情况
     * @param projectExecutionStatisticsDto
     * @return
     */
    List<ProjectExecutionStatisticsVo> projectExecutionStatistics(ProjectExecutionStatisticsDto projectExecutionStatisticsDto);

    /**
     * 统计 批次 完成情况
     */
    List<VAreaCalculationMain> areaCalculationMainStatistics(Integer projectId);

    /**
     * @title 按批次 统计生产过程数据（看板）
     * @description
     * @author 白强
     * @updateTime 2021/12/14 10:46
     * @throws
     */
    VAreaCalculationMain getBatchExecutionStatisticsVos(Integer mainId);

    /**
     * 条码解析 并校验 条码出入库状态
     * @param barcode
     * @param businessType   业务类型 1 ：入库业务  2：出库业务
     * @return
     */
    VAreaCalculationMain analysisByBarCode(String barcode,Integer businessType);


    /**
     * 导入挂价
     * @author 小啊刚
     * @date 2021-12-10
     */
    void importPrice(Integer orderId, MultipartFile file) throws IOException;
}
